package com.dc.commons.query;

import java.util.Map;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.context.request.NativeWebRequest;

import com.dc.commons.enumer.MoveType;

/*******************************************************************************<P>
 * 文件名: Query.java <br>
 * 版本: 1.0<br>
 * 描述: 收集查询条件，整合查询数据 准备进行查询<br>
 * 版权所有: <br>
 * <P>
 * 创建者: 王建栋 <br>
 * 创建日期: 2016年4月22日 下午7:25:56<br>
 * 修改者: <br>
 * 修改日期: <br>
 * 修改说明: <br>
 ******************************************************************************/
public class DcQuery {

	/**
	 * 导出  辅助参数， 是否结束
	 */
	private boolean end=false;
	/**
	 * 分页信息
	 */
	private Pageable pageable;
	
	/**
	 * 本地request 请求
	 */
	private NativeWebRequest request;
	
	/**
	 * 查询 信息
	 */
	private Map<String,Object> queryMap;
	
	/**
	 * Excel信息
	 */
	private Map<String,String> exceltMap;
	
	/**
	 * 项目的绝对路径
	 */
	private String realPath;
	
	/**
	 *  页面选中的项
	 */
	private String[] ids;
	
	/**
	 *  移动树 from 节点 
	 */
	private String from;
	
	/**
	 *  移动树 to 节点
	 */
	private String to;
	/**
	 *  移动树 类型
	 */
	private MoveType moveType;
	
	
	
	public Pageable getPageable() {
		return pageable;
	}
	public void setPageable(Pageable pageable) {
		this.pageable = pageable;
	}
	public NativeWebRequest getRequest() {
		return request;
	}
	public void setRequest(NativeWebRequest request) {
		this.request = request;
	}
	public Map<String, Object> getQueryMap() {
		return queryMap;
	}
	public void setQueryMap(Map<String, Object> queryMap) {
		this.queryMap = queryMap;
	}
	
	
	 
	/**
	 *  获取 Excel 相关信息
	 * @return exceltMap
	 */
	public Map<String, String> getExceltMap() {
		return exceltMap;
	}
	
	/**
	 * 设置Excel相关信息
	 * @param exceltMap
	 */
	public void setExceltMap(Map<String, String> exceltMap) {
		this.exceltMap = exceltMap;
	}
	/**
	 * 整合查询
	 * @param clazz
	 * @return Specification
	 */
	public <T>Specification<T> buildSpecification(Class<T> clazz){
		return DynamicSpecifications.buildAndDcQuery(this,clazz);
	}
	
	/**
	 * 整合查询 
	 * @param clazz
	 * @param queryMap
	 * @return Specification
	 */
	public <T>Specification<T> buildSpecification(Class<T> clazz,Map<String,Object> queryMap){
		DcQuery query=new DcQuery();
		query.setQueryMap(queryMap);
		return DynamicSpecifications.buildAndDcQuery(query,clazz);
	}
	
	
	/**
	 *  获取 项目的绝对路径
	 * @return realPath
	 */
	public String getRealPath() {
		return realPath;
	}
	
	
	/**
	 *  设置 项目的绝对路径
	 * @param realPath
	 */
	public void setRealPath(String realPath) {
		this.realPath = realPath;
	}
	
	/**
	 * 获取 页面选中的项
	 * @return ids
	 */
	public String[] getIds() {
		return ids;
	}
	
	/**
	 * 设置页面选中的项
	 * @param ids
	 */
	public void setIds(String[] ids) {
		this.ids = ids;
	}
	
	/**
	 * 是否结束 导出结束标示
	 * @return
	 */
	public boolean isEnd() {
		return end;
	}
	
	/**
	 * 是否结束  导出结束标示
	 * @param end
	 */
	public void setEnd(boolean end) {
		this.end = end;
	}
	
	/**
	 * 获取 移动树 from 节点 
	 * @return from
	 */
	public String getFrom() {
		return from;
	}
	
	/**
	 *  设置 移动树 from 节点 
	 * @param from
	 */
	public void setFrom(String from) {
		this.from = from;
	}
	
	/**
	 * 获取 移动树 to 节点
	 * @return to
	 */
	public String getTo() {
		return to;
	}
	
	/**
	 * 设置 移动树 to 节点
	 * @param to
	 */
	public void setTo(String to) {
		this.to = to;
	}
	
	/**
	 * 获取 移动树 类型
	 * @return moveType
	 */
	public MoveType getMoveType() {
		return moveType;
	}
	
	/**
	 * 设置 移动树 类型
	 * @param moveType
	 */
	public void setMoveType(MoveType moveType) {
		this.moveType = moveType;
	}
	
	
	
}
